package com.ithiema.luence;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.File;
import java.io.IOException;

public class LuencetestUpdate {
    /* 测试：修改索引
     * 注意：
     * 	A：Lucene修改功能底层会先删除，再把新的文档添加。
     * 	B：修改功能会根据Term进行匹配，所有匹配到的都会被删除。这样不好
     * 	C：因此，一般我们修改时，都会根据一个唯一不重复字段进行匹配修改。例如ID
     * 	D：但是词条搜索，要求ID必须是字符串。如果不是，这个方法就不能用。
     * 如果ID是数值类型，我们不能直接去修改。可以先手动删除deleteDocuments(数值范围查询锁定ID)，再添加。
     */
    @Test
    public void updateTest() throws IOException {
        // 创建目录对象
        Directory directory = FSDirectory.open(new File("indexDir"));
        //创建写出工具配置对象
        IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, new IKAnalyzer());
        //创建写出工具
        IndexWriter indexWriter = new IndexWriter(directory, config);
        //创建新的文件数据
        Document document = new Document();
        document.add(new StringField("id", "1", Field.Store.YES));
        document.add(new TextField("title", "谷歌地图之父跳槽facebook 为了加入传智播客 屌爆了啊", Field.Store.YES));

        //修改索引。参数：
        //词条：根据这个词条所匹配到的文档都会修改
        //文档信息：要修改的新文档数据
        indexWriter.updateDocument(new Term("id", "1"), document);
        //提交
        indexWriter.commit();
        indexWriter.close();
    }


}
